#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：123.py 
@File ：测试数据批量初步评估_GUI版本.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2025/1/6 上午11:17 
"""

import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter import ttk
import os
import re
import pandas as pd


# 定义一个函数来处理字段值
def process_field_value(field_name, field_value, default_values):
	# 检查字段值是否为默认值
	if field_name in default_values and field_value == default_values[field_name]:
		return None
	return field_value


def process_xlsx(file_path, default_values):
	# 读取xlsx文件
	df = pd.read_excel(file_path, engine='openpyxl')

	# 获取所需的值
	fields = {
		'排程模式': 'first_value',
		'主轧段需排重量': 'first_value',
		'排程模型': 'first_value',
		'过渡模型': 'first_value',
		'供料后工序': 'first_value',
		'供料后工序单据日期': 'first_value',
		'供料后工序需排重量': 'first_value',
		# 可以在这里添加更多的字段
	}

	# 初始化结果字典
	result = {}

	# 处理每个字段
	for field_name, value_column in fields.items():
		field_value = df.loc[df['attribute_name'] == field_name, value_column].values[0]
		result[field_name] = process_field_value(field_name, field_value, default_values)

	return result


def main(root_dir, default_values):
	# 打开res.txt文件，准备追加写入
	res_file_path = os.path.join(root_dir, 'res.txt')
	with open(res_file_path, 'a', encoding='utf-8') as res_file:
		# 遍历根目录下的所有文件夹
		for folder_name in os.listdir(root_dir):
			folder_path = os.path.join(root_dir, folder_name)

			# 确保是文件夹
			if os.path.isdir(folder_path):
				# 遍历文件夹下的所有子文件夹
				for sub_folder_name in os.listdir(folder_path):
					sub_folder_path = os.path.join(folder_path, sub_folder_name)

					# 确保子文件夹名称全为数字
					if re.match(r'^\d+$', sub_folder_name):
						# 遍历子文件夹下的所有文件
						for file_name in os.listdir(sub_folder_path):
							# 确保文件以dynamic_rule开头且为xlsx文件
							if file_name.startswith('dynamic_rule') and file_name.endswith('.xlsx'):
								file_path = os.path.join(sub_folder_path, file_name)

								# 处理xlsx文件，获取所需值
								result = process_xlsx(file_path, default_values)

								# 构建评价语句
								evaluation_sentence = f"文件夹{os.path.basename(folder_path)}的"
								for field_name, field_value in result.items():
									if field_value is not None:
										evaluation_sentence += f"{field_name}为{field_value}，"

								# 去掉最后一个逗号
								if evaluation_sentence.endswith('，'):
									evaluation_sentence = evaluation_sentence[:-1]

								evaluation_sentence += "。\n"

								# 打印评价语句以检查内容
								print(evaluation_sentence)

								# 追加写入到res.txt文件中
								res_file.write(evaluation_sentence)


# GUI部分
def select_root_directory():
	global root_dir
	root_dir = filedialog.askdirectory()
	root_dir_entry.delete(0, tk.END)
	root_dir_entry.insert(0, root_dir)


def run_process():
	# 获取用户输入的默认值
	default_values = {
		'排程模式': default_values_entries['排程模式'].get(),
		'主轧段需排重量': default_values_entries['主轧段需排重量'].get(),
		'供料后工序': default_values_entries['供料后工序'].get(),
		'供料后工序单据日期': default_values_entries['供料后工序单据日期'].get(),
		'供料后工序需排重量': default_values_entries['供料后工序需排重量'].get(),
		'过渡模型': default_values_entries['过渡模型'].get(),
	}

	# 调用主处理函数
	main(root_dir, default_values)
	messagebox.showinfo("提示", "处理完成！")


# 创建主窗口
root = tk.Tk()
root.title("数据评估配置")

# 创建输入框和按钮
root_dir_label = tk.Label(root, text="根目录:")
root_dir_label.grid(row=0, column=0, padx=5, pady=5)
root_dir_entry = tk.Entry(root, width=50)
root_dir_entry.grid(row=0, column=1, padx=5, pady=5)
root_dir_button = tk.Button(root, text="选择", command=select_root_directory)
root_dir_button.grid(row=0, column=2, padx=5, pady=5)

# 创建默认值输入区域
default_values_entries = {}
default_values_frame = tk.LabelFrame(root, text="默认值配置")
default_values_frame.grid(row=1, column=0, columnspan=3, padx=5, pady=5)

default_values_labels = {
	'排程模式': '排程模式',
	'主轧段需排重量': '主轧段需排重量',
	'供料后工序': '供料后工序',
	'供料后工序单据日期': '供料后工序单据日期',
	'供料后工序需排重量': '供料后工序需排重量',
	'过渡模型': '过渡模型',
}

default_values_initial = {
	'排程模式': '',
	'主轧段需排重量': '3000',
	'供料后工序': "TB,DD,DE,DK,DG,TD,DA,DB,TA,DF,DJ",
	'供料后工序单据日期': ",,,,,,,,,,,",
	'供料后工序需排重量': ",,,,,,,,,,,",
	'过渡模型': "普料",
}

row = 0
for key, label in default_values_labels.items():
	tk.Label(default_values_frame, text=label).grid(row=row, column=0, padx=5, pady=5)
	entry = tk.Entry(default_values_frame, width=50)
	entry.grid(row=row, column=1, padx=5, pady=5)
	entry.insert(0, default_values_initial[key])  # 设置初始值
	default_values_entries[key] = entry
	row += 1

run_button = tk.Button(root, text="运行评估", command=run_process)
run_button.grid(row=2, column=1, padx=5, pady=20)

root.mainloop()
